import string
import uuid
from urllib.parse import urlparse
import hashlib
import os.path


def genUUID():
    return str(uuid.uuid1()).replace('-', '')

def md5(value):
    m = hashlib.md5(value.encode(encoding='utf8'))
    return m.hexdigest()

"""
http://www.abc.com/a/b/c
-->
['www.abc.com','a','b','c']
"""
class StringHelper:
    @staticmethod
    def url_divider(url):
        pair = None
        after = None

        result = None

        try:
            pair = url.split(':',1)
            pair[0] += ':/'
        except:
            pass

        if pair is None:
            after = url
        else:
            after = StringHelper.delete_piece(pair[1],'//')

        result = after.split('/')

        if pair is not None:
            result.insert(0,pair[0])

        if result[len(result) - 1] == '':
            result.pop()

        return result

    @staticmethod
    def part_to_url(parts):
        content = "/".join(parts)
        return content

    @staticmethod
    def delete_piece(raw,piece) -> str:
        if piece is None or piece == '':
            return raw

        if raw is None or raw == '':
            raise Exception('Are u kidding me?')

        str = raw.index(piece)
        end = str + len(piece)

        result = raw[0:str] + raw[end:len(raw)]

        return result

    @staticmethod
    def delete_piece_ex(raw, piece, index=0):
        if piece is None or piece == '':
            return raw

        if raw is None or raw == '':
            raise Exception('Are u kidding me?')

        index = raw.index(str(piece), index)
        end = index + len(str(piece))

        result = raw[0:index] + raw[end:len(raw)]

        return (result, index)

    """
    if
        raw = '<meta http-equiv="content-type" content="text/html;charset=utf-8">'
        key = charset

    this function will return
        'utf-8'
    """
    @staticmethod
    def extra_equ_value(raw, key, rest):
        try:
            sta = raw.index(key)
            tra = raw.index('=',sta)
            end = raw.index(rest,tra + 2)

            pair = raw[sta:end]
            pair = pair.split('=', 1)

            return pair[1]
        except:
            return ''

    """
    raw = href(www.abc.com)
    a = (
    b = )
    result = (www.abc.com)
    """
    @staticmethod
    def extra_a_to_b(raw, a, b):
        try:
            sta = raw.index(a)
            end = raw.index(b, sta + len(a))
        except:
            return ''

        result = raw[sta:end + len(b)]
        return result

    """
        raw = href(www.abc.com)
        a = (
        b = )
        result = www.abc.com
    """
    @staticmethod
    def extra_a_to_b_x(raw, a, b):
        try:
            sta = raw.index(a)

            if b is None or b == '':
                end = len(raw)
            else:
                end = raw.index(b, sta + len(a))
        except:
            return ''

        result = raw[sta + len(a):end]
        return result

    """
        raw = href(www.abc.com)
        a = (
        b = )
        result = www.abc.com
    """
    @staticmethod
    def extra_int(raw:str) -> int:
        result = 0
        indent = 0

        for item in raw[::-1]:
            try:
                val = int(item)
                result += val * 10 ** indent
                indent = indent + 1
            except:
                pass

        return result


    """
    raw = href(www.abc.com)
    key = www.abc.com
    value = 123

    result = href(123)
    """
    @staticmethod
    def exchange(raw, key, value, index=0):
        tup = StringHelper.delete_piece_ex(raw, key, index)

        raw = tup[0]
        op = raw[0:tup[1]]
        ed = raw[tup[1]:len(raw)]

        result = op + str(value) + ed
        return result

    """
    raw = a/b/c
    key = /

    result = a
    """
    @staticmethod
    def cutfrom(raw,key):
        index = len(raw)
        try:
            index = raw.index(key)
        except:
            pass

        result = raw[0:index]
        return result

    @staticmethod
    def exchange_ex(raw, a, b, value):
        key = StringHelper.extra_a_to_b(raw, a, b)
        return StringHelper.exchange(raw, key, value)

    """
    'data nani'
    to
    tupe -> ('data','nani')
    """
    @staticmethod
    def str_to_tup(raw):
        try:
            if raw.count(' ') != 1:
                return None

            tup = raw.split(' ', 1)

            return tup
        except:
            return None

    # parent_container = ('div', {"class": 'ej_list_box clear'})
    """
    (div,[class:ej_list_box clear,id:top left])
    """
    @staticmethod
    def str_to_dictup(raw):
        try:
            cap = StringHelper.extra_a_to_b(raw, '(', ')')
            cap = StringHelper.delete_piece_ex(cap, '(', 0)[0]
            cap = StringHelper.delete_piece_ex(cap, ')', len(cap) - 1)[0]

            tup = cap.split(',', 1)

            return (tup[0], StringHelper.str_to_dic(tup[1]))
        except:
            return None

    @staticmethod
    def str_to_dic(raw):
        try:
            dic = dict()

            cap = StringHelper.extra_a_to_b(raw, '[', ']')
            cap = StringHelper.delete_piece_ex(cap, '[', 0)[0]
            cap = StringHelper.delete_piece_ex(cap, ']', len(cap) - 1)[0]

            pair = cap.split(',')

            for item in pair:
                if item is None or item == '':
                    pair.remove(item)

            for item in pair:
                _pair = item.split(':', 1)
                dic[_pair[0]] = _pair[1]

            return dic
        except:
            return dict()


    @staticmethod
    def cut_head(raw:str, head:str) -> str:
        """cut the head"""
        if head is None or head is '':
            return raw

        if raw.count(head) > 0:
            index = raw.index(head)
            result = raw[index + len(head):len(raw)]

            return result

    @staticmethod
    def cut_tail(raw:str, tail:str) -> str:
        """cut the tail"""
        if tail is None or tail is '':
            return raw

        tail_index = len(raw) - 1
        index = -1

        while(index == -1):
            if tail_index < 0:
                return raw

            try:
                index = raw.index(tail, tail_index)
                break
            except:
                tail_index -= 1

        return raw[0:index]

    @staticmethod
    def strip_head_tail(raw:str, head:str, tail:str) -> str:
        """
        from head and tail cut the string
        :param raw:
        :param head:
        :param tail:
        :return:
        """

        if head is None and tail is None:
            return raw

        res = StringHelper.cut_head(raw, head)
        res = StringHelper.cut_tail(res, tail)

        return res

    @staticmethod
    def unescape(raw):
        import html
        txt = html.unescape(raw)

        return txt

    @staticmethod
    def extra_filename(raw):
        return os.path.basename(raw)

    @staticmethod
    def extra_suffix(raw):
        name = StringHelper.extra_filename(raw)
        suffix = name.split('.', 1)
        return suffix[1]

    @staticmethod
    def make_path(pre, suf):
        return os.path.join(pre, suf)

    @staticmethod
    def is_url(raw:str) -> bool:
        prefix = 'http'

        if raw.startswith(prefix):
            return True
        return False

    @staticmethod
    def separator(raw:str, key:str) -> list:
        try:
            result = raw.split(key)
            return result
        except Exception as e:
            import traceback
            msg = traceback.format_exc()
            print(msg)

    @staticmethod
    def dic_looper(dic:dict, path:list) -> any:
        """
        提取字典
        :param dic:
        :param path:
        :return:
        """
        tmp = None

        for key in path:
            if tmp is None:
                tmp = dic[key]
            else:
                tmp = tmp[key]

        return tmp

    @staticmethod
    def trim(raw:str) -> str:
        result = raw

        if raw.startswith(' ') or raw.endswith(' '):
            for index,i in enumerate(raw):
                if i is not ' ':
                    result = raw[index:len(raw)]
                    break

            war = result[::-1]

            for index,i in enumerate(war):
                if i is not ' ':
                    result = result[0:len(war) - index]
                    break

        return result


    @staticmethod
    def str_to_dic_ex(raw:str, segments:str, separator:str) -> dict:
        result = dict()

        parts = raw.split(segments)

        for part in parts:
            part = StringHelper.trim(part)
            tup = part.split(separator)

            result[tup[0]] = tup[1]

        return result

    @staticmethod
    def contain_zh(raw:str) -> bool:
        '''
        判断传入字符串是否包含中文
        :param raw: 待判断字符串
        :return: True:包含中文  False:不包含中文
        '''
        try:
            for char in raw:
                if ('\u4e00' <= char <= '\u9fa5'):
                    return True
            return False
        except:
            return False

    @staticmethod
    def html_tag_killer(raw:str) -> str:
        """
        清除字符串中的 html 标签
        例如 &quot; &amp;
        :param raw:
        :return:
        """
        tags = ['&quot;', '&amp;']

        for tag in tags:
            raw = raw.replace(tag, '')

        return raw

    @staticmethod
    def bad_img_tag_killer(raw:str) -> str:
        """
        清楚字符串中 <img src="../../abc.jpg" />
        这样 路径无效的 图片的
        :param raw:
        :return:
        """
        pass

    @staticmethod
    def bad_img_tag_recover(raw:str, path:str) -> str:
        """
        qing ch字符串中 <img src="../../abc.jpg" />
        这样 路径无效的 图片的

        :param raw:
        :return:
        """
        level_tag = "../"

        try:
            sample_img_tag = StringHelper.extra_a_to_b(raw, '<img', '>')

            if sample_img_tag == '':
                return raw

            relative_depth = sample_img_tag.count(level_tag)

            if relative_depth < 1:
                return raw

            old_path_pice = level_tag * relative_depth

            relative_depth += 1

            while relative_depth > 0:
                path = StringHelper.cut_tail(path, '/')
                relative_depth -= 1

            path += '/'

            res = raw.replace(old_path_pice, path)

            return res
        except:
            return raw

    # @staticmethod
    # def img_tag_restrict(raw: str) -> str:
    #     """
    #     20180705 add:
    #     增加限制图片宽度功能以适配手机宽度
    #     style="max-width: 100%;"
    #
    #     :param raw:
    #     :return:
    #     """
    #     style_tab = 'style'
    #
    #     try:
    #         original_img_tag = StringHelper.extra_a_to_b(raw, '<img', '>')
    #
    #         if sample_img_tag == '':
    #             return raw
    #
    #         relative_depth = sample_img_tag.count(level_tag)
    #
    #         if relative_depth < 1:
    #             return raw
    #
    #         old_path_pice = level_tag * relative_depth
    #
    #         relative_depth += 1
    #
    #         while relative_depth > 0:
    #             path = StringHelper.cut_tail(path, '/')
    #             relative_depth -= 1
    #
    #         path += '/'
    #
    #         res = raw.replace(old_path_pice, path)
    #
    #         return res
    #     except:
    #         return raw

    @staticmethod
    def html_untag(raw:str) -> str:
        """
        简单去除 html 标签
        此方法拥有极大的隐患，目前只在微博文章中去除标签使用，其他环境下慎用
        :param raw:
        :return:
        """
        p_tag_s = '<p>'
        p_tag_e = '</p>'
        b_tag_s = '<b>'
        b_tag_e = '</b>'
        br_tag = '<br/>'
        img_tag_s = '<img '
        img_tag_e = '/>'

        raw = raw.replace(p_tag_s, '')
        raw = raw.replace(p_tag_e, '')
        raw = raw.replace(b_tag_s, '')
        raw = raw.replace(b_tag_e, '')
        raw = raw.replace(br_tag, '')

        while raw.count(img_tag_s) > 0:
            try:
                raw = StringHelper.exchange_ex(raw, img_tag_s, img_tag_e, '')
            except:
                break

        return raw

# con1 = '<img alt = "陈建斌曝郑晓龙曾担心《甄嬛传》拍出来没人看" class ="art_img_mini_img j_fullppt_cover" data-src="//n.sinaimg.cn/ent/transform/439/w630h609/20180705/V4qr-hevauxk8037114.jpg" src="" />'
# con2 = '<img alt = "陈建斌曝郑晓龙曾担心《甄嬛传》拍出来没人看" class ="art_img_mini_img j_fullppt_cover" data-src="//n.sinaimg.cn/ent/transform/439/w630h609/20180705/V4qr-hevauxk8037114.jpg" src="" style="display:none" />'
# con3 = '<img alt = "陈建斌曝郑晓龙曾担心《甄嬛传》拍出来没人看" class ="j_fullppt" data-src="//n.sinaimg.cn/ent/transform/439/w630h609/20180705/V4qr-hevauxk8037114.jpg" disabeld-show="true" src="" style="display:none" ><h2 class="art_img_tit">陈建斌曝郑晓龙曾担心《甄嬛传》拍出来没人看</h2></img>'

# content = '<p>​</p><p><b>1</b></p><p><br/></p><p>朋友就职于一家物业公司。公司规模很大，下设二十多个分公司。<br/></p><p><br/></p><p>在一次技能实操比赛的时候，他们领导看中了一个五十多岁的工程师傅张大哥。因为这位张大哥不仅技术一流，而且他的思维很活跃，很爱学习，做事也很有灵性。</p><p><br/></p><p>后来，公司总部刚好缺一个工程助理。当时分公司很多工程人员挤破了头，都想来填这个缺。</p><p><br/></p><p>可是领导点名，就要张大哥。</p><p><br/></p><p>也许在常人看来，这不仅意味着升职加薪，还相当于获得了很多跟领导接触的机会。</p><p><br/></p><p>可是张大哥得知这一消息，居然拒绝了。他甚至说，我不愿意去总部，如果非要让我去，我就辞职。</p><p><br/></p><p>当时领导知道后，对张大哥更是好奇，于是派人事部员工去问缘由。</p><p><br/></p><p>刚开始，领导还想，这个张大哥真不识抬举，不肯来，不是嫌工资开的不够，就是故意端着。</p><p><br/></p><p>可最后张大哥给出的理由却是：因为在分公司工作很单纯，每天干完活儿可以腾出点时间看看书；而到了总部，不仅要干活，还要应付各类社交，太耗费时间和精力。</p><p><br/></p><p>后来，朋友的这位领导没再强求，也没让张大哥辞职，毕竟员工随处可以找，但人才却不多见。据说这位张大哥在他们公司是“万金油”，虽然本职工作是工程，可他做出来的表格比财务经理还规范，他处理劳资纠纷的能力比人事部主管还要强，甚至他写的工作总结跟总经理的秘书也有一拼。</p><p><br/></p><p>但就是这样的一个“猛人”，他人生的目标，居然就是做一份简单的工作，拿着微薄的收入，然后把时间“浪费”在不挣钱的事儿上。</p><p><br/></p><p><b>比如他每隔三年，都会深专一项技能，并且乐在其中，画画、写诗、拆解摩托车，研究牛是如何思考的，这些都曾是他的爱好。</b></p><p><br/></p><p>朋友告诉我说，这张大哥，在他眼里，根本就不是一个正常人，放着好工作不干，整天花时间去做一些无聊的事，有什么用呢。</p><p><br/></p><p>我笑了笑，没说话，但随后就让朋友推荐了这位张大哥，我立马加了他的微信。</p><p><br/></p><p><b>2</b></p><p><br/></p><p>有这样一类人，他们放着好好的专业能力和学历，不作为职业或去深造，放着大好的晋升前景，却改行去干特别不起眼的事。<br/></p><p><br/></p><p><b>这样做有意义吗？也许在世俗的眼光里，毫无意义，甚至是不务正业。可是于他们而言，很快乐，这就是最大的意义和价值。</b></p><p><br/></p><p>我常常在想，人工作究竟是为了什么？也许你会说，为了生存，为了挣钱，为了实现自我价值。</p><p><br/></p><p>可是，为什么当有些人还在不停追求功名利禄时，有的人却仅仅满足于基本的温饱？</p><p><br/></p><p><b>你会发现，生活里，总是有那么一小部分人，他们活着，真的就是为了心中的诗和远方，他们生命的价值，就是为了去做自己想做，喜欢做，并让他们感到快乐的事。</b></p><p><br/></p><p>于现实来讲，很多人与其说成不了这小部分人，不如说他们不敢成为这样的人。</p><p><br/></p><p>当然活法有很多种，不是每天看几本书，整天穷游就是“诗和远方”了。当然我也不是佛系青年，但我总觉得，当一个人对物质的追求越来越少时，基于的不是看破红尘，而是内心的丰富。</p><p><br/></p><p><b>只要你有能力负担得起自己的决定，任何活法都有它的意义，都值得尊重。</b></p><p><br/></p><p><b>3</b></p><p><br/></p><p>这段时间，我身边的朋友们都在热烈讨论着房价。<br/></p><p><br/></p><p>有的人，本来有了一套房，可总是嫌弃房子太小，想方设法换大房子。有的人，本来有了几套房，可总是想要再购入几套作为投资。</p><p><br/></p><p>于是，当在那些没房人的眼里，有了一套哪怕是蜗居的房子也无比幸福的时候，这些有房的人，却一直活得很焦虑。他们为了曾经没有早点下手的房子而后悔，为了早卖了的房子而唉声叹气，为了还没买到手的房子捶胸顿足。</p><p><br/></p><p>可是在我看来，并不至于如此。卖了的就卖了，买不起的还是买不起，实在没地住，那就努力挣钱呀，再不济，租房住也没什么不可以。</p><p><br/></p><p><b>最重要的从来不是房子，而是生活。当你负担不起房子的时候，再糟蹋了美好的生活，这才是真正吃大亏的事。</b></p><p><br/></p><p>我上下班都会经过一个修自行车的小摊位。每天经过，那个修车师傅的一家人都挤在那里，一个不到10平米的地方，又要修车，又要放零件，还要做饭、洗碗、铺地铺，老实说，看着都让人觉得心累。</p><p><br/></p><p>因为地方实在太小，他们一家人吃饭，几乎都是把桌子放在摊位外面一个小空地上。他们的饭桌上，常常只用一个大碗装一个菜，可是一家人吃得津津有味，那吃饭的姿势和满足的表情，真的会让人直流口水。</p><p><br/></p><p>每当我心情不愉快时，就会特意在摊位面前走慢一点，然后多观察几秒那个修车师傅一家人的日常生活，每次它总是提醒我，人最大的财富，其实就是拥有好的心态。</p><p><br/></p><p>其实这个修车师傅一家人的生活过得很窘迫，可这并不代表他没有努力呀，他依旧在竭尽所能把每一辆车都修好。只是因为个人生存的局限，让他很难改变自身的物质条件。</p><p><br/></p><p><b>我们总以为，当我们拥有了更多的金钱，才能过上更幸福的生活，可是后来你会发现，过上幸福的生活，也许真不需要那么多钱。因为哪怕你已经和想象中一样有钱，依旧不会快乐。</b></p><p><br/></p><p>只要我们没有懈怠，不偷懒，不放弃，我们就依旧在拼命地往上走。谁能说穷人就不如富人呢。富人也许可以在钱财上有优势，可是穷人也有过好生活的资格和能力。</p><p><br/></p><p><b>4</b></p><p><br/></p><p>越年长，越会以更加开阔的视角，去看待这个世界。<br/></p><p><br/></p><p>也许对于有的人而言，未必要怎样去追求物质上的富足。他们能过上安安稳稳的小日子，人生就算知足了。</p><p><br/></p><p>而有的人，非要可劲儿地折腾，直到证明自己实在无法征服这个世界时，才回去过安稳日子。</p><p><br/></p><p>本质上，第二类人，并不算失败。</p><p><br/></p><p>因为一直过安稳日子的人，真的无法体会“遇见很多有趣的人，经历许多未知的事”究竟是怎样一种曼妙的人生体验。</p><p><br/></p><p>也许对于有的人而言，读书、毕业、工作、结婚、生子，就是他们的人生进度条；可对于有的人而言，这些并非是全都必须要经历的。</p><p><br/></p><p>有的人一辈子都在寻找人生的价值和意义，有的人一辈子打着光棍儿，还有的人，根本就不在乎是否有孩子为老来的自己养老送终。</p><p><br/></p><p>也许在以前，我会觉得那第二种人真的是剑走偏锋。</p><p><br/></p><p><b>可是后来，读过了越来越多的书，就发现，原来能包容更多种不同的活法，才是一个人成熟了的标志。</b></p><p><br/></p><p>因为到最后，你会懂得：<b>人活着，最大的意义，就是拥有丰富多彩的人生阅历和经历，无论它是顺境还是逆境，是好运还是厄运，是挫折还是幸运。</b></p><p>​</p><img src="https://r.sinaimg.cn/large/article/c7cff151035312028d4b5d70a617c149" alt=""/><p>​​​​</p>'
# res = StringHelper.html_untag(content)
# print(res)

# tester = '迭起，这些作品在视听语言、故事、表演方面都展现出高水平的艺术水准，这也再度证明，一部好的文艺电影绝不是晦涩、沉闷的代名词，而是能够满足观众对观赏性与艺术性的双重需求。</p><p align=\"center\" style=\"TEXT-ALIGN: center\"><font color=\"blue\" face=\"楷体\"><img alt=\"“文艺”不是烂片的遮羞布\" height=\"500\" id=\"62262386\" src=\"../../attachement/jpg/site2/20180522/f44d30758a0c1c6dcb5c60.jpg\" style=\"BORDER-BOTTOM: #000000 0px solid; BORDER-LEFT: #000000 0px solid; BORDER-TOP: #000000 0px solid; BORDER-RIGHT: #000000 0px solid\" title=\"“文艺”不是烂片的遮羞布\" width=\"335\"/></font></p><p align=\"center\" style=\"TEXT-ALIGN: center; FONT-FAMILY: 楷体; COLOR: blue\"><font color=\"bl'
# content = "<p>　　<strong><font color=\"#993300\">作者：徐颢哲</font></strong></p><p>　　张鲁一和佟丽娅主演的抗战剧《爱国者》在江苏卫视开播近一周，获得了不错的收视成绩。这部以东北抗联真实故事改编的抗战剧，开篇部分以快节奏的谍战戏迅速吸引观众的眼球。今年上半年，除了《爱国者》，已有《和平饭店》《誓言》等多部抗战题材电视剧播出，前几年曾大行其道的“抗战神剧”再也没有出现，回归剧情、表演和制作，抗战剧正走在拨乱反正的路上。</p><p>　　以飞刀敌炮火、包子当炸弹、子弹打飞机、徒手撕鬼子、裤裆藏手雷等雷人桥段著称的“抗日神剧”，让人哭笑不得。还有人以“抗日神剧”为素材，编了一本名叫《中国抗日剧读本：意想不到的反日、爱国喜剧》的书，收集了21部“抗日神剧”，总计678集，总时长503小时，即30180分钟。在很多人看来，这些“抗日神剧”只是一种“完全无视时代背景”的幽默搞笑。</p><p>　　“抗战神剧”的出现，与当时的市场环境不无关系。不负责任的出品方希望在内容上以“奇”取胜，而播出平台看重的是收视率，于是在“越骂越火”的恶性循环中，“抗战神剧”成泛滥之势。众多港台导演的入驻，也为“抗日神剧”的歪风助力。其实这批港台导演执导抗战剧的本意，是希望打开内地市场，但其自身娱乐化的风格与习惯性的武侠剧套路，让其手下的抗战剧失去了原本应有的风格，变为披着抗战剧外衣的“玄幻”剧。</p><p>　　抗战剧的拨乱反正，是政策管控和市场回归理性双管齐下的产物。从近期立项的剧目看，有关革命历史重大题材的作品40部左右，占据电视剧行业很大比重，并且均无雷人改编。前不久举行的北京电视剧“春推会”，以《亮剑》主创团队为班底的《老字号传奇》和由张鲁一、张钧甯主演的《长河落日》两部大制作抗战剧，均获得重点推介。</p><p>　　从电视剧发展规律看，正确讲述抗日历史、在常识之中改编故事的作品一定是主流。怀揣敬畏之心呈现抗战历史，在影视改编上已形成绝对的共识。正如《爱国者》导演龚朝辉所说，抗日战争这段苦难时光，凝聚了一个民族自立自强的精神气质，却拍出来大量被观众戏谑的“抗日神剧”，不由地让人很难过，希望《爱国者》是一部能够让大家正视中国苦难历程的正剧。</p><p>　　影视剧的创作规律决定了一点，以投机取巧的方式刻画抗战，必然遭人唾弃。创作一部抗日剧，先要熟悉历史，要做大量案头工作，进行实地采风，确定大致的写作主题和框架；在详细研究目标历史阶段后构思故事，大到战争再现、军队番号与编制、各种武器装备，小到服饰特征、饮食习惯、语言特点等，都不可凭空瞎编，而需要下足功夫苦心研究。《爱国者》的剧本，编剧汪海林领衔的团队花了整整六年时间打造，进行了大量实地采访，创作期间数易其稿。</p><p>　　此前的“抗日神剧”，雷人表象下有一条重要的逻辑支撑——矮化或弱化日本侵略者，从而一味凸显抗日力量的强大。主创者们忽略了一个事实：没有强大的敌人，又怎么会有如此漫长的抗战？从《爱国者》已经播出的剧集来看，日本侵略者非但不弱，在智力和武力上反而非常强悍，也因此给抗日力量造成了巨大损失。《爱国者》主人公以杨靖宇将军为原型，日军几千人在东北雪乡追捕他，杨靖宇牺牲后日军还专门开了一个研讨会。这意味着，抗战剧创作有非常重要的一点：客观呈现你的对手，观众才会认为剧中人物是可信的。</p><p>　　决定抗战剧品质的，最终还是要归于人物塑造。张鲁一此前主演的另一部高口碑抗战剧《红色》，讲述孤岛时期上海普通民众与日本侵略者斗智斗勇的故事，一开始剧中主人公就像一个情感迟钝、与世隔绝的隐士，却不由自主地被时代所裹挟，卷入了战争的漩涡。故事的发展线索，便是这个兼具色盲、晕血的毛病，温吞、市侩的脾气的小人物最后成为特工的心理成长过程。类似创作思路，也出现在今年初播出的《和平饭店》中，雷佳音主演的“东北最有文化的土匪”王大顶，无意间卷入抗战，观众在被紧张剧情吸引之余，也感叹这个人物的可爱与真实。</p><p>　　抗战剧应有严肃的思想内核，而同时若无实力过硬的演技派担纲主演，也难有好的市场反馈。电视剧产业“流量＞剧情＞演技”的潜规则不可避免地应验在抗战剧这一领域，但年轻流量明星确实还缺乏驾驭高品质抗战剧的能力——李易峰、周冬雨主演的《麻雀》、赵丽颖主演的《胭脂》播出后，口碑都很一般。</p><p>　　《爱国者》中有许多诗一样饱蘸感情的台词，这曾让张鲁一疑惑，他说读第一遍时感觉“说不出口”。编剧汪海林告诉他：我们是在写一个一个的咏叹调，是歌剧式的写法。于是，张鲁一读第二遍时，觉得可以说了。读完第三遍后，他说：“我发现必须要这么说，不这样说就不是这个人物、不是这个戏了！”演员完全相信了自己的角色，观众才可能相信这个角色，看似主观的演技，需要大量客观实践的积累。试想，如果让表情面瘫的“小鲜肉”说一大堆诗一样的台词，能走心么？（徐颢哲）<a href=\"http://www.gmw.cn\"><img src=\"https://img.gmw.cn/pic/content_logo.png\" title=\"返回光明网首页\"/></a></p><div id=\"contentLiability\">[责任编辑:刘冰雅]</div>"
# a = 'http://wenyi.gmw.cn/2018-05/22/content_28910934.htm'
#
# print(content)
# print('')
# new = StringHelper.bad_img_tag_recover(content, a)
# print(new)



# test = '从偶像练习生出道的蔡徐坤、陈立农、范丞丞等人只是试验品？'
# result = StringHelper.html_tag_killer(test)
#
# print(result)




# a = 'tt_token=true; ticket=gQEU8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyUC1YcjFqa0ljbTMxNWpONTFxMTMAAgRDYwVaAwQQDgAA; useLoginAccount=; rmbuser=; name=; token=19F4F6D2BEA528AEB624649C747A4869; UM_distinctid=15fa50aee98a74-0961f84f1146d5-31657c00-15f900-15fa50aee99708; __root_domain_v=.newrank.cn; _qddamta_2852150610=3-0; tt_token=true; ticket=gQEU8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyUC1YcjFqa0ljbTMxNWpONTFxMTMAAgRDYwVaAwQQDgAA; useLoginAccount=; rmbuser=; name=; token=19F4F6D2BEA528AEB624649C747A4869; _qddaz=QD.914crl.e90znq.j9tn4bgx; _qdda=3-1.22ktlf; _qddab=3-zg1rat.j9tn4bov; CNZZDATA1253878005=1217426431-1510300947-null%7C1510300947; Hm_lvt_a19fd7224d30e3c8a6558dcb38c4beed=1510302479,1510302487,1510302490; Hm_lpvt_a19fd7224d30e3c8a6558dcb38c4beed=1510302573'
# b = StringHelper.str_to_dic_ex(a, ';', '=')
#
# print(b)



# s = 'select * from a where a=b and b=b sdfasd-anddwfewfg '
# key = 'and'
#
# r = StringHelper.cut_tail(s,key)
# print(r)



# new = 'http://mp.weixin.qq.com/s?__biz=MzI3NTE2NTQyNw==&mid=2650732480&idx=1&sn=1bb3fc609893ba203056c58cfb0549cc&scene=0#wechat_redirect'
# wechat = 'http://mp.weixin.qq.com/s?__biz=MzI3NTE2NTQyNw==&amp;mid=2650723012&amp;idx=3&amp;sn=cd063cd229a06d3a12db40b57c212fdd&amp;scene=4#wechat_redirect'
# sogou = 'http://mp.weixin.qq.com/s?__biz=MzI4MzM5MDYwMg==&mid=2247483897&idx=1&sn=8b9aa83c7f827dd81f005c5b8a1a7463&scene=0#wechat_redirect'
#
# _new = StringHelper.unescape(new)
# _wechat = StringHelper.unescape(wechat)
#
# print(new)
# print(_new)
# print()
# print(wechat)
# print(_wechat)
# print()
# print(sogou)


# raw = "value result uuid 2033BD4A9F6CE6DCD3D0E37C76271EBE"
# head = "result uuid"
#
# res = StringHelper.cut_head(raw, head)
# print(res)

# raw = 'href(www.abc.com)'
# res = StringHelper.exchange_ex(raw, '(', ')', '123')
# StringHelper.extra_a_to_b(raw,'(',')')

# raw = '<meta http-equiv="content-type" content="text/html;charset=utf-8">' \
#       '<meta http-equiv="X-UA-Compatible" content="IE=Edge">' \
#       '<meta content="always" name="referrer">' \
#       '<meta name="theme-color" content="#2932e1">'
#
# StringHelper.extra_equ_value(raw,'charset','"')

# raw = 'http://www.we.cn/yu?ty=poi&io=io'
# piece = '//'
#
# result = StringHelper.url_divider(raw)
# result = StringHelper.part_to_url(result)
#
# print('123')

# list = ['http://mmbiz.qpic.cn/mmbiz_png/jK29WJZHWvXknGV6CmJwS2tpO2Mh6cv7jWsplOR4yBsMicia0PuicN92cJgdp2z7ZxZKvtETu1T9e0iantEibicpXZ3A/0?wx_fmt=png',
#         'http://mmbiz.qpic.cn/mmbiz_jpg/dWDqLbRCSMOWLaYhkibjkmZt93t8CC1mNMsxu5UW7loEic5mhJAWkhHD2OibShtE5q02yIpNO2mjN1YKPgKFPpnhw/0?wx_fmt=jpeg'
# ,'http://mp.weixin.qq.com/s?__biz=MzAwMjE1NjcxMg==&mid=2654653817&idx=1&sn=6fae536588395dc99612dc77d15d4421&scene=0#wechat_redirect'
# ,'http://mp.weixin.qq.com/s?__biz=MjM5ODEyOTAyMA==&mid=2661907990&idx=1&sn=b720b926978517096d41adc237ce85d2&scene=0#wechat_redirect'
# ,'http://mp.weixin.qq.com/s?__biz=MzA3Mjk3ODIwOQ==&mid=2657625783&idx=3&sn=e436a1c3f412dcbe1c59d245deb77ab4&scene=0#wechat_redirect'
# ,'32g34g32bv3e'
# ,'32233'
# ,'d57d67df67f685f78g796tg8g87gh87ghh'
# ,'d57d67df67f685f78g796tg8g87gh87ghh']
#
# for i in list:
#     print(md5(i))